Modern application software is generally event driven. A variety of events occur during the course of running application software. The events can be hardware-generated or software-generated events. Each event belongs to an event type, which is defined by the event source. For example, the event type can be defined as the change in an input/output (I/O) pin voltage level. An event of this event type occurs when the I/O pin changes its voltage level.
When an event occurs, an event message indicating that the event has occurred is generated. The message can be generated by a server such as network server. For the event driven application software, the message can serve as an input for one or more software modules. The software modules can include program subroutines whose code is executed upon receiving the message.
Computing systems have a standard central dispatch mechanism to dispatch the messages to the software modules. A central dispatcher module is generally a subsystem within the server and receives the messages generated by the server. The central dispatcher module is programmed with dispatching strategies to dispatch the messages received from the server. In another words, the central dispatcher module is programmed to dispatch messages for certain kinds of events to certain software modules. For example, the central dispatcher module can be programmed to transmit a message for two kinds of events to a certain subroutine: the messages indicating that a user has clicked the mouse button and the messages indicating that the input output pin voltage level has changed.
The central dispatcher module directly interfaces to the software modules. To install new software modules that subscribe to be notified of the occurrence of specific kinds of events, remove existing software modules, define new events types, or modify the dispatching strategies, the central dispatcher module or the operating system is reprogrammed. The central dispatcher module and the application software is shut down to perform the reprogramming. This presents a problem because frequent reprogramming can result in a high amount of downtime for the application software and the computing system.